Subject: Pre-AIW6 Capabilities Exchange Post

From: Frank Bordonaro <[email-masked]>
Date: Tue, 13 Sep 94 10:13:07 PDT

Capability RIGers,

    Attached is the latest Capabilities Exchange section that will be
    added to the dlsw12 spec. It will appear in the closed pages version
    of our spec.

    This version closes the MAC address format issue. It specifies that MAC
    addresses and MAC masks are in NON-canonical format as per email 
    discussions 2-3 weeks ago. This was the overwhelming opinion of those 
    who participated in the discussion. 

    Many thanks to those who provided excellent feedback.
    Please post any comments, corrections, etc... to the forum as soon as
    possible so changes can be made before AIW6.

Regards,
Frank Bordonaro
cisco Systems, Inc.

==============================================================================

5. Capabilities Exchange Formats/Protocol:

   The Data Link Switching Capabilities Exchange is formatted as a single General
   Data Stream (GDS) Variable with multiple type "LT" structured subfields.
   This Capabilities Exchange message is carried in an DLSw Switch-to-Switch 
   Protocol control header.

   The DLSw Capabilities Exchange Request has the following overall format:

       +----+----+-----------------+
       | LL | ID | Control Vectors |
       +----+----+-----------------+

       0-1         Length, in binary, of the DLSw Capabilities Exchange
                   Request GDS Variable.  The value of LL is the sum of
                   the length of all fields in the GDS Variable (i.e.
                   length of LL + length of ID + length of Control
                   Vectors).

       2-3         GDS Id: 0XF000

       4-n         Control Vectors consisting of type LT structured subfields
                   (i.e. the DLSw Capabilities Exchange Structured Subfields)

   Type LT structured subfields consist of a 1-byte length field (the "L"), a 1-
   byte type field (the "T") and n-bytes of data.  The length field includes itself
   as well as the structured subfield.  The structured subfield consists of the
   type field and data so the length is n + 2.  This imposes a length restriction
   of 253 bytes on all data contained in a structured subfield.

5.1. Control Vector Id Range

   Control Vector identifiers (i.e. Type) in the range of 0x80 through 0xCF are
   reserved for use by the Data Link Switching standard.

   Control Vector identifiers (i.e. Type) in the range of 0xD0 through 0xFD are
   used for vendor-specific purposes.

   Currently defined vectors are:

     Vector Description                     Hex Value

     Vendor Id Control Vector                0x81
     DLSw Version Control Vector             0x82
     Initial Pacing Window Control Vector    0x83
     Version String Control Vector           0x84
     MAC Address Exclusivity Control Vector  0x85
     Supported Sap List Control Vector       0x86
     TCP Connections Control Vector          0x87
     NetBIOS Name Exclusivity Control Vector 0x88
     MAC Address List Control Vector         0x89
     NetBIOS Name List Control Vector        0x8A
     Reserved for future use                 0x8B - 0xCF
     Vendor Specific                         0xD0 - 0xFD

AIW DLSw Related Interest Group                                  [Page 21]

RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

5.2. Control Vector Order and Continuity

   Since their contents can greatly affect the parsing of the Capabilities Exchange
   GDS Variable, the required control vectors must occur first and appear in the
   following order:  Vendor Id, DLSw Version Number, Initial Pacing Window,
   Supported SAP List. The remainder of the Control Vectors can occur in any order.

   Control Vectors that can be repeated (i.e. MAC Address List Control Vector and
   NetBIOS Name List Control Vector) are not necessarily adjacent.  It is
   advisable, but not required, to have the exclusivity control vectors occur prior
   to either of the above two vectors so that the use of the individual MAC
   addresses or NetBIOS names will be known prior to parsing them.

5.3. Run-Time Capabilities Exchange

   Capabilities exchange always occurs when the SSP connection is started between
   two DLSw switches. Capabilities Exchange can also occur at run-time, typically 
   when a configuration change is made.

   Support for run-time Capabilities Exchange is optional.  If a node does not 
   support receiving/using run-time capex and receives one, it should discard it 
   quietly (not send back a negative response).  If a node supports receipt of 
   run-time capabilities, it should send a positive or negative response as 
   appropriate.  The receiver of a negative response to a run-time capabilities 
   message is not required to take down its TCP connections with the offended partner.
 
   Run-time Capabilities Exchange can consist of one or more of the following control
   vectors. Note that the control vectors required at start-up are not present in a 
   run-time Capabilities Exchange.

     1. MAC Address Exclusivity CV,
     2. NetBIOS Name Exclusivity CV,
     3. MAC Address List CV,
     4. NetBIOS Name List CV,
     5. Supported SAP List CV

   A run-time capabilities exchange is a replacement operation.  As such, all
   pertinent MAC addresses and NetBIOS names must be specified in the run-time
   exchange. In addition, run-time changes in capabilities will not effect existing
   link station circuits.

5.4 Capabilities Exchange Filtering Responsibilities

   Recipients of the SAP, MAC, and NetBIOS lists are not required to actually use 
   them to filter traffic, etc., either initially or at run-time.

5.5. DLSw Capabilities Exchange Structured Subfields

   The Capabilities Exchange Subfields are listed in the table below and are
   described in the following sections:

The following table summarizes the DLSw Capabilities Exchange Control Vectors.
 
        Required
   ID   @ Startup  Length  Repeatable  Runtime  Order  Content
   ===  =========  ======  ==========  =======  =====  ========================
   x81     Y         x05        N         N       1    Vendor ID
   x82     Y         x04        N         N       2    DLSw Version
   x83     Y         x04        N         N       3    Initial pacing window
   x84     N       >=x02        N         N       5+   Version String
   x85     N         x03        N         Y       5+   MAC Address Exclusivity
   x86     Y         x12        N         Y       4    Supported SAP List
   x87     N         x03        N         N       5+   TCP Connections
   x88     N         x03        N         Y       5+   NetBIOS Name Exclusivity
   x89     N         x0E        Y         Y       5+   MAC Address List
   x8A     N       <=x13        Y         Y       5+   NetBIOS Name List

5.5.1. Vendor Id (0x81) Control Vector

   The Vendor Id control vector identifies the manufacturer's IEEE assigned
   Organizationally Unique Identifier (OUI) of the Data Link Switch sending the
   DLSw Capabilities Exchange.  The OUI is sent in non-canonical (Token-Ring)
   format.  This control vector is required and must be the first control vector.

AIW DLSw Related Interest Group                                  [Page 22]

RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

           Offset  Length  Value       Contents
           ------  ------  -----       --------
              0       1    0x05        Length of the Vendor Id structured
                                       subfield
              1       1    0x81        key = 0x81  that identifies this as the
                                       Vendor Id structured subfield
             2-4      3                the 3-byte Organizationally Unique
                                       Identifier (OUI) for the vendor
                                       (non-canonical format)

5.5.2. DLSw Version (0x82) Control Vector

   The DLSw Version control vector identifies the particular version of the DLSw
   standard supported by the sending Data Link Switch.  This control vector is
   required and must follow the Vendor Id Control Vector.

           Offset  Length  Value       Contents
           ------  ------  -----       --------
              0       1    0x04        Length of the Version String structured
                                       subfield
              1       1    0x82        key = 0x82  that identifies this as the
                                       DLSw Version structured subfield
              2       1                the hexadecimal value representing the
                                       DLSw standard Version number of the
                                       sending Data Link Switch.
                                         X'01' (indicates version 1 - closed pages)
              3       1                the hexadecimal value representing the
                                       DLSw standard Release number of the
                                       sending Data Link Switch.
                                         X'00' (indicates release 0)

5.5.3. Initial Pacing Window (0x83) Control Vector

   The Initial Pacing Window control vector specifies the initial value of the
   receive pacing window size for the sending Data Link Switch.  This control
   vector is required and must follow the DLSw Version Control Vector.

           Offset  Length  Value       Contents
           ------  ------  -----       --------
              0       1    0x04        Length of the Initial Pacing Window
                                       structured subfield
              1       1    0x83        key = 0x83  that identifies this as the
                                       Initial Pacing Window structured subfield
             2-3      2                the pacing window size.

AIW DLSw Related Interest Group                                  [Page 23]

RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

5.5.4. Version String (0x84) Control Vector

   The Version String control vector identifies the particular version number of
   the sending Data Link Switch.  The format of the actual version string is
   vendor-defined.  This control vector is optional.

           Offset  Length  Value       Contents
           ------  ------  -----       --------
              0       1    0xn         Length of the Version String structured
                                       subfield
              1       1    0x84        key = 0x84  that identifies this as the
                                       Version String structured subfield
             2-n     n-2               the ASCII string that identifies the
                                       software version for the sending DLSw.

AIW DLSw Related Interest Group                                  [Page 24]

RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

******** REMOVED NETBIOS SUPPORT CV *************

******** ADDED MAC ADDRESS EXCLUSIVITY CV *************

5.5.5. MAC Address Exclusivity (0x85) Control Vector
 
   The MAC Address Exclusivity control vector identifies how the MAC Address List
   control vector data is to be interpreted.  Specifically, this control vector
   identifies whether the MAC addresses in the MAC Address List control vectors are
   the only ones accessible via the sending Data Link Switch.
 
   If a MAC Address List control vector is specified and the MAC Address Exclusivity
   control vector is missing, then the MAC addresses are not assumed to be the only
   ones accessible via this switch.
 
   A node may specify that it supports no local MAC addresses by including in its
   capabilities the MAC Address List Exclusivity CV (with byte 2 == X'01'), and
   not including any instances of the MAC Address List CV.
 
           Offset  Length  Value       Contents
           ------  ------  -----       --------
              0       1    X'03'       Length of the Exclusivity structured
                                       subfield
              1       1    X'85'       key = X'85' that identifies this as the
                                       MAC address Exclusivity structured
                                       subfield
              2       1                an indicator of the relationship of the
                                       MAC addresses to the sending Data Link
                                       Switch.
                                         X'00'     the MAC addresses specified in
                                                   this Capabilities Exchange
                                                   can be accessed via this
                                                   switch but are not the
                                                   exclusive set (i.e. other
                                                   entities are accessible in
                                                   addition to the ones specified)
                                         X'01'     the MAC addresses specified in
                                                this Capabilities Exchange
                                                   are the only ones accessible
                                                   via this switch.

AIW DLSw Related Interest Group                                  [Page 25]

RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

5.5.6. Supported SAP List (0x86) Control Vector
 
   The Supported SAP List control vector identifies support for SAPs by the sending
   Data Link Switch. Each bit in the SAP control vector data field represents a SAP
   as defined below. This vector is required and must follow the Initial Pacing
   Window Control Vector.
 
   Offset  Length  Value       Contents
   ------  ------  -----       --------
      0       1     0x12       Length of the Supported SAP List structured
                               subfield
      1       1     0x86       key = 0x86 that identifies this as the Supported SAP
                               List structured subfield
     2-17    16                the 16-byte bit vector describing all
                               even numbered SAP's enabled.
 
                               Each Bit within the 16 byte bit vector will
                               indicate whether an even numbered SAP is
                               enabled (b'1') or disabled (b'0').
 
                               Each Byte within the 16 byte bit vector
                               will be numbered from 0 - F. (In the
                               following 1 byte example x would be
                               equal to the appropriate byte number.)
 
                               bbbb bbbb....
                               |||| ||||
                               |||| |||SAP 'xE' enabled or not
                               |||| |||
                               |||| ||SAP 'xC' enabled or not
                               |||| ||
                               |||| |SAP 'xA' enabled or not
                               |||| |
                               |||| SAP 'x8' enabled or not
                               ||||
                               |||SAP 'x6' enabled or not
                               |||
                               ||SAP 'x4' enabled or not
                               ||
                               |SAP 'x2' enabled or not
                               |
                               SAP 'x0' enabled or not

5.5.7. TCP Connections (0x87) Control Vector

   The TCP Connections control vector indicates the support of an alternate number 
   of TCP Connections for the Data Link Switching traffic.  The base implementation
   of Data Link Switching supports two TCP Connections, one for each direction of 
   data traffic.

   This control vector is optional.  If it is omitted in a DLSw Capabilities
   Exchange, then two TCP Connections are assumed.  It is further assumed that if a
   Data Link Switch can support one TCP Connection, it can support two TCP 
   Connections.

   If TCP Connections CV values agree and the number of connections is one, then the 
   DLSw with the higher ip address must tear down the TCP connections on its local
   port 2065.                                              |

   The format of the TCP Sessions Control Vector is shown below:

           Offset  Length  Value       Contents
           ------  ------  -----       --------
           0       1    X'03'       Length of the TCP Connections structured
                                    subfield
           1       1    X'87'       key = X'87' that identifies this as the
                                    TCP Connections structured subfield
           2       1                an indicator of the support for an
                                    alternate number of TCP Connections by
                                    the sending Data Link Switch.
                                      X'01'     the number of TCP Connections
                                                may be brought down to one
                                                after Capabilities Exchange
                                                is completed.
                                      X'02'     the number of TCP Connections
                                                will remain at two for
                                                the duration of the DLSw
                                                connection.

AIW DLSw Related Interest Group                                  [Page 26]

RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

******** REMOVED EXCLUSIVITY CV *************

******** ADDED NETBIOS NAME EXCLUSIVITY CV *************

5.5.8. NetBIOS Name Exclusivity (0x88) Control Vector
 
   The NetBIOS Name Exclusivity control vector identifies how the NetBIOS Name List
   control vector data is to be interpreted.  Specifically, this control vector
   identifies whether the NetBIOS Names in the NetBIOS Name List control vectors are
   the only ones accessible via the sending Data Link Switch.
   
   If a NetBIOS Name List control vector is specified and the NetBIOS Name Exclusivity
   control vector is missing, then the NetBIOS Names are not assumed to be the only 
   ones accessible via this switch. 
  
   A node may specify that it supports no local NetBIOS names by including in its 
   capabilities the NetBIOS Name List Exclusivity CV (with byte 2 == X'01'), and not
   including any instances of the NetBIOS Name List CV. 
 
           Offset  Length  Value       Contents
           ------  ------  -----       --------
              0       1    X'03'       Length of the Exclusivity structured
                                       subfield
              1       1    X'88'       key = X'88' that identifies this as the
                                       NetBIOS Name Exclusivity structured
                                       subfield
              2       1                an indicator of the relationship of the
                                       NetBIOS Names to the sending Data Link
                                       Switch.
                                         X'00'     the NetBIOS Names specified in
                                                   this Capabilities Exchange
                                                   can be accessed via this
                                                   switch but are not the
                                                   exclusive set (i.e. other
                                                   entities are accessible in
                                                   addition to the ones specified)
                                         X'01'     the NetBIOS Names specified in
                                                   this Capabilities Exchange
                                                   are the only ones accessible
                                                   via this switch.

5.5.9. MAC Address List (0x89) Control Vector

   The MAC Address List control vector identifies one or more MAC addresses that
   are accessible through the sending Data Link Switch.  This control vector
   specifies a single MAC address value and MAC address mask value to identify the
   MAC address or range of MAC addresses.  MAC addresses and masks are in non-
   canonical (Token-Ring) format in this control vector.

   This control vector is optional and can be repeated if necessary.

AIW DLSw Related Interest Group                                  [Page 27]

RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

   Note 1: If a particular MAC address, <mac-addr>, satisfies the following
   algorithm, then <mac-addr> is assumed to be accessible via the sending Data Link
   Switch:

   <mac-addr> & <mac-addr-mask> == <mac-addr-value>

   where:  <mac-addr-value> is the MAC Address
                            Value specified in
                            this control vector

           <mac-addr-mask>  is the MAC Address
                            Mask specified in
                            this control vector

   Note 2:  If an individual MAC Address is desired, then <mac-addr-value> should
   be the individual MAC address and <mac-addr-mask> should be 0xFFFFFFFFFFFF.

           Offset  Length  Value       Contents
           ------  ------  -----       --------
              0       1    0x0E        Length of the MAC Address List
                                       structured subfield
              1       1    0x89        key = 0x89  that identifies this as the
                                       MAC Address List structured subfield
             2-7      6                the 6-byte MAC Address Value,
                                       <mac-addr-value> in the above formula
             8-13     6                the 6-byte MAC Address Mask,
                                       <mac-addr-mask> in the above formula

5.5.10. NetBIOS Name List (0x8A) Control Vector

   The NetBIOS Name List control vector identifies one or more NetBIOS names that
   are accessible through the sending Data Link Switch.  This control vector
   specifies a single NetBIOS name in ASCII.  However, the NetBIOS name can consist
   of "don't care" and "wildcard" characters to match on a number of NetBIOS names.
   If an individual character position in the NetBIOS name in this control vector
   contains a '?', then the corresponding character position in real NetBIOS name
   is a "don't care".  If a NetBIOS name in this control vector ends in '*', then
   the remainder of real NetBIOS names is a "don't care". '*' is only considered a
   wildcard if it appears at the end of a name.

   All blanks or nulls at the end of NetBIOS names in this control vector are
   ignored. NetBIOS names which have fewer than 16 bytes and which do not end with 
   '*' are not assumed to have a trailing '*';  the "wildcard" character must be 
   explicit. 

   NetBIOS group names can exist across several LANs/networks.  As such, NetBIOS 
   group names received in a  NetBIOS Name List Control Vector can not be treated
   the same as NetBIOS individual names.  The Individual/Group Flag allows Data 
   Link Switches to distinguish between the two.

   This control vector is optional and can be repeated if necessary.

           Offset  Length  Value       Contents
           ------  ------  -----       --------
              0       1    0xn         Length of the NetBIOS Name List
                                       structured subfield (maximum = 0x12)
              1       1    0x8A        key = 0x8A  that identifies this as the
                                       NetBIOS Name List structured subfield
              2       1                Individual/Group Flag
                                       X'00' - Individual NetBIOS Name
                                       X'01' - Group NetBIOS Name
             3-n     n-3               the NetBIOS name with possible embedded
                                       '?' and terminating '*'.

5.6. Capabilities Exchange Responses

   There are two kinds of DLSw Capabilities Exchange Responses: positive and
   negative.  A positive response is returned to the sending Data Link Switch if

AIW DLSw Related Interest Group                                  [Page 28]

RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

   there were no errors encountered in the DLSw Capabilities Exchange Request.  A
   negative response is returned if there is at least one error encountered.

   A positive DLSw Capabilities Exchange Response has the following overall format:

       +----+----+
       | LL | ID |
       +----+----+

       0-1         Length, in binary, of the DLSw Capabilities Exchange
                   Response GDS Variable.  The value of LL in this case
                   is 0x0004.

       2-3         GDS Id: 0xF001

AIW DLSw Related Interest Group                                  [Page 29]

RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994

   A negative DLSw Capabilities Exchange Response has the following overall format:

   +----+----+--------+--------+
   | LL | ID | Offset | Reason |
   +----+----+--------+--------+

   0-1         Length, in binary, of the DLSw Capabilities Exchange
               Response GDS Variable.  The value of LL is the sum of
               the length of all fields in the GDS Variable (i.e.
               length of LL + length of ID + length of Offsets/Reasons).

   2-3         GDS Id: 0xF002

   4-5         Offset into the DLSw Capabilities Exchange Request of the
               error.  Offset should always point to the start of the
               GDS Variable or a specific control vector.

   6-7         Reason code that uniquely identifies the error.  Specific
               values for the reason code are:
                 0x0001        invalid GDS length for a DLSw Capabilities
                               Exchange Request.  (The value of Offset
                               is ignored.)
                 0x0002        invalid GDS id for a DLSw Capabilities
                               Exchange Request.  (The value of Offset
                               is ignored.)
                 0x0003        Vendor Id control vector is missing.  (The
                               value of Offset is ignored.)
                 0x0004        DLSw Version control vector is missing. (The
                               value of Offset is ignored.)
                 0x0005        Initial Pacing Window control vector is
                               missing.  (The value of Offset is ignored.)
                 0x0006        length of control vectors doesn't correlate
                               to the length of the GDS variable
                 0x0007        invalid control vector id
                 0x0008        length of control vector invalid
                 0x0009        invalid control vector data value
                 0x000A        duplicate control vector (for non-repeating
                               control vectors)
                 0x000B        out-of-sequence control vector (for repeating
                               control vector)
                 0x000C        DLSw Supported SAP List control vector is missing.
                               (The value of Offset is ignored.)

   Note:  Multiple Offset, Reason pairs can be returned with one pair for each
   error encountered.

AIW DLSw Related Interest Group                                  [Page 30]

RFC XXXX      DLSw: Switch-to-Switch Protocol              August 1994